package com.julius.design.suanfa.str;

/**
 * @author julius
 * @date 2021-11-04 下午 2:10
 * <p>
 *      输入一个英文句子，翻转句子中单词的顺序，但单词内字符的顺序不变。
 *      为简单起见，标点符号和普通字母一样处理。例如输入字符串"I am a student. "，则输出"student. a am I"。
 *
 *      链接：https://leetcode-cn.com/problems/fan-zhuan-dan-ci-shun-xu-lcof
 * </p>
 */
public class ReverseWords {


    /**
     * 反转单词
     *      双指针解决方案：
     *          快慢指针
     *
     *
     * @param s
     * @return
     */
    public static String reversesWords(String s){

        s = s.trim();

        int start = s.length()-1; int end = s.length() - 1;
        StringBuilder ans = new StringBuilder();
        while (start >= 0){
            //移动单词的头指针
            while(start >= 0 && s.charAt(start) != ' '){
                start--;
            }
            //遇到单词上边界
            String substring = s.substring(start + 1, end + 1);
            ans.append(substring).append(" ");
            //跳过空格
            while (start >= 0 && s.charAt(start) == ' '){
                start--;
            }
            end = start;
        }
        return ans.toString().trim();
    }
}
